﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace WindowsGame1
{
    /// <summary>
    /// Copiar objetos
    /// This is the main type for your game
    /// </summary>
    public class Object2D
    {
        bool canImgChange;
        Texture2D img;

        /// <summary>
        /// img é uma propriedade para pegar o valor da imagem salva
        /// podemos alterar o valor dela se for habilitado a opção através do construtor
        /// </summary>
        public Texture2D Img
        {
            get //método usado para retornar o valor
            {
                return img; //return = palavra chave usada para retornar o valor
            }
            set //metodo usado para atribuir valor
            {
                if (canImgChange)  //if = condicional usado para verificação
                    //verificação de condição para saber se o codigo será executado
                    img = value;
            }
        }
               
        Vector2 pos;
        /// <summary>
        /// propriedade para alterar e verificar a posição do objeto
        /// </summary>
        public Vector2 Pos { get { return pos; } set { pos = value; } }

        private Color color;
        public Color objectColor
        {
            get { return color; }
            set { color = value; }
        }
        
        private Rectangle rect;
        public Rectangle Rect{
        	get { return rect;}
        	set { rect = value;}        
        }
        
        private float rotation;
        public float Rotation
        {
        	get { return rotation;}
        	set { rotation = value;}
        }

        private Vector2 scale;
        public Vector2 Scale{
        	get { return scale;}
        	set { scale = value;}        
	}
        
        
       private Vector2 origin;
        public Vector2 Origin{
                get { return origin;}
        	set { origin = value;}
        }

	private SpriteEffects effects;
        public SpriteEffects Effects
        {
		get { return effects;}
        	set { effects = value;}
        }

        private float layerDepth;
        public float LayerDepth
        {
        	get { return layerDepth;}
        	set { layerDepth = value;}
        }
                
       /// <summary>
       /// construtor do objeto 2D básico
       /// </summary>
       /// <param name="i"> Imagem do objeto</param>
        public Object2D(Texture2D i)
        {
            img = i;
        }
        /// <summary>
        /// construtor do objeto 2D com opção para futuramente editar imagem
        /// </summary>
        /// <param name="i"> Imagem do objeto</param>
        /// <param name="c">valor booleano para saber se poderá editar a imagem </param>
        public Object2D(Texture2D i, bool c)
        {
            img = i;
            canImgChange = c;

        	rect = new Rectangle(0,0,img.Width, img.Height);
		rotation = 0;
		scale = Vector2.One;
		origin = Vector2.Zero;
		effects = SpriteEffects.None;
		layerDepth = 0;
		objectColor = Color.White;
		pos = Vector2.Zero;

        }

        /// <summary>
        /// Update Function
        /// </summary>
        ///<param name="pGameTime">Utilizado para rastreio de atualizações de tempo do jogo</param>

        public virtual void Update(GameTime pGameTime)

        {
            if (Keyboard.GetState().IsKeyDown(Keys.W))
            {
              //  pos.X = pos.X - 1; // pos.X--; //igual ao do lado
                MoveUp();
               
            }
            if (Keyboard.GetState().IsKeyDown(Keys.S))
            {
              //  pos.X += 1;
                MoveDown();
            }
        }

        public void MoveUp()
        {
            pos.Y--;
        }
        public void MoveDown()
        {
            pos.Y++;
        }


        public void Draw(SpriteBatch pSpriteBatch)
        {
            pSpriteBatch.Draw(img, pos, rect, objectColor,
			 rotation, origin, scale, effects, layerDepth);
        }
























    }

}
